package com.ehome.poct.core.api.feign;

import com.ehome.poct.core.api.dto.check.AlgoLocalDataDTO;
import com.ehome.poct.core.api.dto.check.AlgoNotifyDTO;
import com.ehome.poct.core.api.dto.check.CheckParamDTO;
import com.ehome.poct.core.api.dto.check.project.EhomeProjectDTO;
import com.ehome.poct.core.api.vo.check.CellBoardValidVO;
import com.ehome.poct.core.api.vo.check.CellCheckDataVO;
import com.ehome.poct.core.api.vo.check.CheckProcessResultVO;
import com.ehome.poct.core.api.vo.check.CheckStatusVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;


/**
 * 单机检测的feign客户端
 *
 * @author cq
 * @Date 2022-03-02 16:49
 */
@FeignClient(value = "${service.poct-core:}${service.suffix.poct-core:}",contextId = "checkFeign")
public interface CheckClient {

    /**
     * 开始处理检测
     * @param checkParamDto 开始检测参数DTO
     * @return 检测处理返回结果参数
     */
    @PostMapping("/check")
    CheckProcessResultVO doProcessCheck(CheckParamDTO checkParamDto);

    /**
     *查询检测状态（轮询）
     * @param id 数据ID
     * @return
     */
    @GetMapping("/check/poll/status/{id}")
    CheckStatusVO pollGetStatus(@PathVariable Long id);

    /**
     *查询检测状态（手动）
     * @param id 数据ID
     * @return
     */
    @GetMapping("/check/manual/status/{id}")
    CheckStatusVO manualGetStatus(@PathVariable Long id);
    /**
     *
     * 算法分析完成通知
     */
    @PostMapping("/check/algo/callBack")
    void algoNotify(AlgoNotifyDTO param);

    /**
     * 校验计数板是否存在
     * @param sno 板子编号
     * @return
     */
    @GetMapping("/check/exist/{sno}")
    Boolean boardIsExist(@PathVariable String sno);

    /**
     * 校验计数板是否存在，并返回板子厚度信息
     * @param sno 板子编号
     * @return
     */
    @GetMapping("/check/thickness/{sno}")
    CellBoardValidVO boardThickness(@PathVariable String sno);

    /**
     * 根据数据ID 获取血常规检测数据
     * @param id 血常规检测数据id
     * @return
     */
    @GetMapping("/check/getCellData/{id}")
    CellCheckDataVO getBloodCheckData(@PathVariable  Long id);
    /**
     * 开始处理检测
     * @param algoDto 开始检测参数DTO
     * @return 检测处理返回结果参数
     */
    @PostMapping("/check/savelocalalgodata")
    CheckProcessResultVO saveLocalAlgoData(@RequestBody AlgoLocalDataDTO algoDto);

    @GetMapping("/check/project/{type}")
    List<EhomeProjectDTO> getEhomeProjectWithType(@PathVariable Integer type);
}
